#ifndef _UBT_PROTO_CONTROL_H_
#define _UBT_PROTO_CONTROL_H_
/*
	客户端给服务端发送命令(start,stop,pause,continue,query)，服务端执行且适当时候将状态上报(nty)。
	客户端在start中带新的taskId,服务端应予以保存，以后的消息交互都需在消息头中带上该taskId(不匹配的消息会被丢弃)。
	服务端在状态切换,(run状态下)进度切换,收到query或其他自认为合适时候上报状态。	
	服务端仅在有效期内(当前时间<(head.msgTime+租期)才执行任务，发现不在有效期内的应立即结束并上报；
		特别地 租期为0表示有效期为永久,-1表示立即过期.
*/
typedef enum ubt_control_msg_type{
	ubt_control_msg_type_start_cmd=1,	//开始请求,value1为租期(单位秒)
										//extInfo中fname为导航文件名;收到该命令应在一秒内回应nty
	ubt_control_msg_type_stop_cmd=2,	//结束,value1为租期(单位秒)
	ubt_control_msg_type_pause_cmd=3,	//暂停
	ubt_control_msg_type_continue_cmd=4,  //继续,value1为租期
	ubt_control_msg_type_query_cmd=5,	//查询,
	ubt_control_msg_type_status_nty=128  //状态上报,value1为状态(ubt_control_status);value2,extInfo因状态而不同
};
	
typedef enum ubt_control_status{
	ubt_control_status_pause, //暂停中,value2为暂停原因(ubt_control_pause_reason),extInfo中 pause为暂停原因描述
	ubt_control_status_run,	//运行中，value2为进度(百分制)
	ubt_control_status_done,  //完成,value2为失败原因(ubt_control_fail_reason),  extInfo中fail为失败原因描述
};

typedef enum ubt_control_pause_reason{
	ubt_control_pause_reason_pause,	//收到pause命令
	ubt_control_pause_reason_stop,	//收到stop命令	
	ubt_control_pause_reason_obstacle,	//避障
	ubt_control_pause_reason_location,  //检测到定位异常
	ubt_control_pause_reason_other,		//其他
};

typedef enum ubt_control_fail_reason{
	ubt_control_fail_reason_ok,	//正常完成
	ubt_control_fail_reason_badtask,//任务id不对
	ubt_control_fail_reason_lifetime, //不在有效期	
};

#endif

